define(['underscore','jquery','mage/apply/main','Magento_Ui/js/lib/view/utils/dom-observer','Magento_PageBuilder/js/utils/breakpoints','Magento_PageBuilder/js/events','matchMedia'],function(_,$,mage,domObserver,breakpointsUtils,events){'use strict';var currentViewport;function getCurrentViewport(breakpoints,currentViewport){if(!currentViewport){_.each(breakpoints,function(breakpoint,viewport){if(!currentViewport&&matchMedia(breakpointsUtils.buildMedia(breakpoint.conditions)).matches){currentViewport=viewport;return true;}});} return currentViewport;} function bindCurrentViewportEvents(breakpoints,initialViewport){var timeout;$(window).on('resize',function(){clearTimeout(timeout);timeout=setTimeout(function(){let newCurrentViewport=getCurrentViewport(breakpoints);if(currentViewport!=newCurrentViewport){events.trigger("stage:viewportChangeAfter",{viewport:newCurrentViewport,previousViewport:currentViewport});currentViewport=newCurrentViewport}},50);});} function initializeWidget(el,data,breakpoints,currentViewport){_.each(data,function(config,component){config=config||{};config.breakpoints=breakpoints;config.currentViewport=currentViewport;mage.applyFor(el,config,component);});} return function(data,contextElement){if(!data.currentViewport){data.currentViewport=getCurrentViewport(data.breakpoints,data.currentViewport);} currentViewport=data.currentViewport;_.each(data.config,function(componentConfiguration,elementPath){domObserver.get(elementPath,function(element){var $element=$(element);if(contextElement){$element=$(contextElement).find(element);} if($element.length){initializeWidget($element,componentConfiguration,data.breakpoints,data.currentViewport);}});});bindCurrentViewportEvents(data.breakpoints,data.currentViewport);};});